/////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2012, pa.eeapai@gmail.com                                         //
// All rights reserved.                                                            //
//                                                                                 //
// Redistribution and use in source and binary forms, with or without              //
// modification, are permitted provided that the following conditions are met:     //
//     * Redistributions of source code must retain the above copyright            //
//       notice, this list of conditions and the following disclaimer.             //
//     * Redistributions in binary form must reproduce the above copyright         //
//       notice, this list of conditions and the following disclaimer in the       //
//       documentation and/or other materials provided with the distribution.      //
//     * Neither the name of the pa.eeapai@gmail.com nor the                       //
//       names of its contributors may be used to endorse or promote products      //
//       derived from this software without specific prior written permission.     //
//                                                                                 //
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND //
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED   //
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE          //
// DISCLAIMED. IN NO EVENT SHALL pa.eeapai@gmail.com BE LIABLE FOR ANY             //
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES      //
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;    //
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND     //
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT      //
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS   //
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                    //
/////////////////////////////////////////////////////////////////////////////////////

#include "usb_lib.h"
#include "usb_istr.h"
#include "WinUSBCommSTM32F103.h"

void EP1_IN_Callback(void)
{
  WinUSBComm_In();
}

void EP2_OUT_Callback(void)
{
  WinUSBComm_Out();
}

void WinUSBComm_SetOutEndpointReady()
{
  SetEPRxValid(EP2_OUT);
}

void WinUSBComm_SetInEndpointReady()
{
  SetEPTxValid(ENDP1);
}

uint32_t WinUSBComm_GetInEndpointBufferSize()
{
  return ENDP1_TXBUFFSIZE;
}

uint32_t WinUSBComm_GetOutEndpointBufferSize()
{
  return ENDP2_RXBUFFSIZE;
}

void WinUSBComm_ErrorOnInEndpoint()
{
  SetEPTxStatus(EP1_IN, EP_TX_STALL);
}
void WinUSBComm_ErrorOnOutEndpoint()
{
  SetEPRxStatus(EP2_OUT, EP_RX_STALL);
}

void WinUSBComm_WriteToInEndpoint(uint8_t *pbyData, uint32_t dwByteCount)
{
  USB_SIL_Write(EP1_IN, pbyData, dwByteCount);
}

uint32_t WinUSBComm_GetNumBytesToReadFromOutEndpoint()
{
  return GetEPRxCount(EP2_OUT);
}

uint32_t WinUSBComm_ReadFromOutEndpoint(uint8_t *pbyData)
{
  return USB_SIL_Read(EP2_OUT, pbyData);
}

